/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sacodemel.financeiro.mb;

import com.sacodemel.financeiro.servico.IInvestidoresService;
import com.sacodemel.financeiro.servico.impl.InvestidoresService;
import com.sacodemel.financeiro.modelo.Pessoa;
import com.sacodemel.financeiro.util.JSFUtil;

import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

/**
 *
 * @author X4Q1
 */
@ManagedBean
@RequestScoped
public class InvestidoresMB implements Serializable {

    private DataModel listaInvestidores = null;
    private IInvestidoresService ivestidoresService = new InvestidoresService();
    private Pessoa pessoa = new Pessoa();

    /**
     * @return the listaInvestidores
     */
    public DataModel getListaInvestidores() {

        if (listaInvestidores == null) {
            this.carregaListagem();
        }

        return listaInvestidores;
    }

    public String retornaFormulario() {
        return "investidoresForm";
    }

    public String preparaAlteracao() {
        this.carregaRegistroSelecionado();

        return retornaFormulario();
    }

    public String salvar() {
        try {
            ivestidoresService.salvar(pessoa);
            this.finalizaOperacao();
            return voltar();
        } catch (Exception ex) {
            JSFUtil.adicionaMensagemFalha(ex.getMessage());
        }

        return null;

    }

    public String excluir() {
        try {
            this.carregaRegistroSelecionado();
            ivestidoresService.excluir(pessoa);
            this.finalizaOperacao();
            return voltar();
        } catch (Exception ex) {
            JSFUtil.adicionaMensagemFalha(ex.getMessage());
        }

        return null;

    }

    public String voltar() {
        return "investidores";
    }

    /**
     * @param listaInvestidores the listaInvestidores to set
     */
    public void setListaInvestidores(DataModel listaInvestidores) {
        this.listaInvestidores = listaInvestidores;
    }

    /**
     * @return the ivestidoresService
     */
    public IInvestidoresService getIvestidoresService() {
        return ivestidoresService;
    }

    /**
     * @param ivestidoresService the ivestidoresService to set
     */
    public void setIvestidoresService(IInvestidoresService ivestidoresService) {
        this.ivestidoresService = ivestidoresService;
    }

    /**
     * @return the pessoa
     */
    public Pessoa getPessoa() {
        return pessoa;
    }

    /**
     * @param pessoa the pessoa to set
     */
    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    private void carregaListagem() {
        try {
            listaInvestidores = new ListDataModel(ivestidoresService.obterListaInvestidores());
        } catch (Exception e) {
            JSFUtil.adicionaMensagemFalha(e.getMessage());
        }
    }

    private void carregaRegistroSelecionado() {
        pessoa = (Pessoa) listaInvestidores.getRowData();
    }

    private void finalizaOperacao() {
        JSFUtil.adicionaMensagemSucesso();
        pessoa = new Pessoa();
        this.carregaListagem();
    }
}
